/**
 * 伪造IP，下载图片
 * @type {_|exports|module.exports}
 * @private
 */
var _ = require('underscore');
var cheerio = require('cheerio');
var superagent = require('superagent');
var async = require('async');
var mkdirp = require('mkdirp');
var fs = require('fs');
var http = require('http');

//本地存储目录
var dir = './animal_big';

//创建目录
mkdirp(dir, function (err) {
    if (err) {
        console.log(err);
    }
});

var imgList = new Array();


//var url = "http://www.easyicon.net/iconsearch/iconset:flatastic-icons";//图标
var url = "http://www.easyicon.net/iconsearch/iconset:animal-icons/"; //头像
getData(url);

function getData(url) {

    console.log("url", url)

    superagent.get(url).end(function (err, sres) {
        if (err) {
            console.log(err)
            return;
        }

        var $ = cheerio.load(sres.text);
        var pages_all = $(".pages_all");
        var thisPage = pages_all.find("span");
        var next = thisPage.next();

        var liList = $("#container").find("ol").find("li");

        var pages = new Array();
        _.each(liList, function (item, index) {

            if (index == 0) {
                return;
            }
            var href = $(item).find("a").eq(0).attr("href");
            //获取数据，下载
            //getHtml(href);

            pages.push(href);
        })

        console.log(pages.length)

        async.eachSeries(pages, function (item, callback) {
            //getHtml(item, function () {
            //    callback(null)
            //});

            //获取最大图片
            getHtmlBig(item, function () {
                callback(null)
            });

            getHtmlBig

        }, function (err, result) {

            if (err) {
                console.log("-一轮结束-" + err)
            }

            var href = next.attr("href");
            if (href) {
                href = "http://www.easyicon.net" + href;
                getData(href);
            }

        });

    });

}



function getHtml(href, getHtmlCB) {

    var temp = "http://www.easyicon.net" + href;

    console.log(temp)

    superagent.get(temp).end(function (err, sres) {
        if (err) {
            console.log(err)
            return;
        }

        var $ = cheerio.load(sres.text);

        var sub_img_box = $(".sub_img_box");

        var name = $(".icon_img_one").find("img").attr("alt");
        if (name) {
            name = name.replace(/ /g, "_")
        }

        var a96 = $("img[width=96]").parent().find("a").eq(0);
        var href96 = a96.attr("href");
        if(!href96){//没有96情况，第一个小于96大于 64的图片
            var img = sub_img_box.find("img").eq(0);
            var width = img.attr("width");
            if(width > 64 && width < 96){
                href96 = img.parent().find("a").eq(0).attr("href");
            }
        }

        var a64 = $("img[width=64]").parent().find("a").eq(0);
        var href64 = a64.attr("href");
        if(!href64){//没有64情况，第一个小于64大于 32的图片
            var img = sub_img_box.find("img").eq(0);
            var width = img.attr("width");
            if(width > 32 && width < 64){
                href64 = img.parent().find("a").eq(0);
            }
        }

        var a32 = $("img[width=32]").parent().find("a").eq(0);
        var href32 = a32.attr("href");
        if(!href32){//没有32情况，第一个小于32的图片
            var img = sub_img_box.find("img").eq(0);
            var width = img.attr("width");
            if(width < 32){
                href32 = img.parent().find("a").eq(0);
            }
        }


        async.parallel(
            [function (cb) {
                if (href96) {
                    saveImagea(href96, dir, name + "@3x.png", function () {
                        cb(null);
                    })
                } else {
                    cb(null);
                }
            },
                function (cb) {
                    if (href64) {
                        saveImagea(href64, dir, name + "@2x.png", function () {
                            cb(null);
                        })
                    } else {
                        cb(null);
                    }
                },
                function (cb) {
                    if (href32) {
                        saveImagea(href32, dir, name + ".png", function () {
                            cb(null);
                        })
                    } else {
                        cb(null);
                    }
                }
            ], function (err, results) {

                if (err) {
                    console.log("下载出错")
                }

                getHtmlCB();
            })


    });

}


/**
 * 获取最大图片
 * @param href
 * @param getHtmlCB
 */
function getHtmlBig(href, getHtmlCB) {

    var temp = "http://www.easyicon.net" + href;

    console.log(temp)

    superagent.get(temp).end(function (err, sres) {
        if (err) {
            console.log(err)
            return;
        }

        var $ = cheerio.load(sres.text);

        var sub_img_box = $(".sub_img_box");

        var name = $(".icon_img_one").find("img").attr("alt");
        if (name) {
            name = name.replace(/ /g, "_")
        }

        var href = $(".img_detail_one").find("h4").find("a").eq(0).attr("href");


        if (href) {
            saveImagea(href, dir, name + ".png", function () {
                getHtmlCB();
            })
        } else {
            getHtmlCB();
        }


    });

}




/**
 * 伪造ip，下载图片
 * @param url
 * @param dir
 * @param name
 * @param cb
 */
var saveImagea = function (url, dir, name, cb) {

    var ip = _.random(1, 254)
        + "." + _.random(1, 254)
        + "." + _.random(1, 254)
        + "." + _.random(1, 254)

    console.log(url, ip)
    superagent
        .get(url)
        //.set("X-Forwarded-For" , "10.111.198.90")
        .set("X-Forwarded-For", ip)
        .end(function (err, sres) {
            if (err) {
                console.log(err)
                return;
            }
            //console.log(sres.body);
            fs.writeFile(dir + "/" + name, sres.body, 'binary', function (err) {
                if (err) throw err;
                console.log('file saved ' + name);
                cb();
            });
        })

}
